#ifndef _CONSOLE_H
#define _CONSOLE_H

#include "types.h"

// 颜色代码定义 (用于ANSI转义序列)
#define COLOR_BLACK   0
#define COLOR_RED     1
#define COLOR_GREEN   2
#define COLOR_YELLOW  3
#define COLOR_BLUE    4
#define COLOR_MAGENTA 5
#define COLOR_CYAN    6
#define COLOR_WHITE   7
#define COLOR_RESET   8

// 控制台初始化与基础IO

/**
 * 初始化控制台子系统
 */
void console_init(void);

/**
 * 输出一个字符到控制台
 * @param c 要输出的字符
 */
void console_putc(char c);

/**
 * 输出字符串到控制台
 * @param s 以空字符结尾的字符串
 */
void console_puts(const char *s);

/**
 * 批量写入数据到控制台
 * @param buf 数据缓冲区
 * @param n 要写入的字节数
 */
void console_write(const char *buf, int n);

/**
 * 从控制台读取一行输入（带行编辑）
 * @param buf 输入缓冲区
 * @param max_len 缓冲区最大长度
 */
void console_readline(char *buf, int max_len);

// 清屏与光标控制

/**
 * 清除整个屏幕并将光标重置到左上角
 */
void clear_screen(void);

/**
 * 将光标移动到指定位置
 * @param x 列 (从0开始)
 * @param y 行 (从0开始)
 */
void goto_xy(int x, int y);

/**
 * 清除从光标位置到行尾的内容
 */
void clear_line(void);

// 颜色控制

/**
 * 设置后续输出的前景色
 * @param color 颜色代码 (使用COLOR_* 常量)
 */
void set_foreground_color(int color);

/**
 * 设置后续输出的背景色
 * @param color 颜色代码 (使用COLOR_* 常量)
 */
void set_background_color(int color);

/**
 * 重置颜色和文本属性为默认值
 */
void reset_color(void);

// 格式化输出

/**
 * 带颜色的格式化输出
 * @param color 颜色代码
 * @param fmt 格式字符串
 * @param ... 可变参数
 * @return 输出的字符数
 */
int printf_color(int color, const char *fmt, ...);

#endif // _CONSOLE_H
